// @Title  sqlite_db.go
// @Description  用来连接sqllite数据库，及对sqllite数据库进行CRUD
// @Author  IT搬运工
// @Update
package dao

import (
	"intelligentgateway/src/logs"
	"time"

	"github.com/jinzhu/gorm"
	_ "github.com/logoove/sqlite"
)

//采集端tcp配置信息
type GatherTcpInfo struct {
	Id int    `gorm:"AUTO_INCREMENT"`
	Ip string `gorm:"size:15"`
	//所属通道ID
	ChannelId string `gorm:"size:30"`
	Port      int
	//设备唯一ID码
	Sn string `gorm:"size:30"`
	//状态 0：可用 1：不可用
	State int
	//描述
	Description string `gorm:"size:300"`
	//0--modbus
	Type       int
	CreateTime time.Time
}

//上报端的TCP配置信息
type TransportTcpInfo struct {
	Id int    `gorm:"AUTO_INCREMENT"`
	Ip string `gorm:"size:15"`
	//所属通道ID
	ChannelId string `gorm:"size:30"`
	Port      int

	//状态 0：可用 1：不可用
	State int
	//描述
	Description string `gorm:"size:300"`
	//0--protobuff
	Type       int
	CreateTime time.Time
}

//串口配置信息
type GatherSerailPortInfo struct {
	Id int    `gorm:"AUTO_INCREMENT"`
	Sn string `gorm:"size:30"`
	//所属通道ID
	ChannelId string `gorm:"size:30"`
	Address   string `gorm:"size:10"`
	Baudrate  int
	Databits  int
	Stopbits  int
	Parity    string `gorm:"size:3"`
	State     int
	//0--modbus
	Type        int
	Description string `gorm:"size:300"`
	CreateTime  time.Time
}

//modbus点表
type ModbusDataPoint struct {
	Id int    `gorm:"AUTO_INCREMENT"`
	Sn string `gorm:"size:30"`
	//数据类型
	DataType int
	//点表名称
	Name string `gorm:"size:100"`
	//采集间隔（S）
	CollectInterval int
	CreateTime      time.Time
}

//点表的具体信息
type ModbusDataPointItem struct {
	Id              int `gorm:"AUTO_INCREMENT"`
	PointId         int
	ModbusDataPoint ModbusDataPoint `gorm:"ForeignKey:Id;AssociationForeignKey:PointId"`
	Addr            int
	Magnification   int
	Key             string `gorm:"size:30"`
	//序列号
	SerialNum  int
	CreateTime time.Time
}

var SqliteDB *gorm.DB

//初始化数据库
func init() {
	db, err := gorm.Open("sqlite3", "config/device_gateway.db3")
	if nil != err {
		logs.Error("%v", err)
	}
	if db != nil {
		SqliteDB = db
	}
}

//关闭数据库连接
func CloseDB() {
	if SqliteDB != nil {
		SqliteDB.Close()
	}
}

//返回数据库操作对象
func GetDB() *gorm.DB {
	return SqliteDB
}
